package com.youlu.campus.entity;

import com.youlu.campus.base.community.RankingList;
import com.youlu.campus.base.interactive.ActivitySignUpUserBase;
import com.youlu.campus.entity.domain.ActivityTaskDataDomain;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 用户参与活动用户实体类
 *
 * @author: zhuhuaiqi
 */
@Data
@Document("user_participate_activity_info")
public class UserParticipateActivityInfo extends ActivitySignUpUserBase {
    @Transient
    private ActivityInfo activityInfo;
    /**
     * 报名时间
     */
    //@Indexed(background = true)
    private Date signUpTime;
    /**
     * 完成时
     */
    private Date accomplishTime;
    /**
     * 是否完成,默认为否
     */
    private Boolean accomplished = Boolean.FALSE;

    /**
     * 是否报名
     */
    private Boolean joined = Boolean.FALSE;
    /**
     * 排行榜信息
     */
    @Transient
    private List<RankingList> rankingList = new ArrayList<>();

    /**
     * 活动任务明细
     */
    @Transient
    private List<ActivityTaskInfo> tasks = new ArrayList<>();
    /**
     * 当前阶段,0:报名阶段,1:奖励发放阶段
     */
    private Integer currentStep;
    /**
     * 是否收藏
     */
    private Boolean favorited;
    /**
     * 收藏时间
     */
    private Date favoritedTime;
    /**
     * 是否有答题
     */
    private Boolean hasQa = Boolean.FALSE;
    /**
     * 答题次数，可以尝试答题次数
     */
    private Integer reTryQaNum = 0;
    /**
     * 总答题次数
     */
    private Integer totalQaNum = 10;
    /**
     * 校赛得分
     */
    private Double qaScore = 0D;
    /**
     * 省赛得分
     */
    private Double provinceQaScore = 0D;
    /**
     * 国赛得分
     */
    private Double countryQaScore = 0D;
    /**
     * 是否通过
     */
    private Boolean passed = Boolean.FALSE;
    /**
     * 已经获得证书
     */
    @Transient
    private List<CaInfo> caInfos = new ArrayList<>();
    /**
     * 我的证书名字
     */
    @Transient
    private List<String> myCaInfos = new ArrayList<>();
    /**
     * 题目总数量
     */
    private Integer questionNum;
    /**
     * 线下组织活动状态,0: 未完成,1:已完成,2:未报名,3:待审核,4:审核通过,5:审核不通过
     */
    private Integer offLineStatus = 2;
    /**
     * 线下组织活动状态,0: 未完成,1:已完成,2:未报名,3:待审核,4:审核通过,5:审核不通过
     */
    private Integer volunteerWelfareStatus = 2;
    /**
     * 线下组织活动状态,0: 未完成,1:已完成,2:未报名,3:待审核,4:审核通过,5:审核不通过
     */
    private Integer broadcastStatus = 2;
    /**
     * 承办单位活动进度,0:待审核,1:审核通过,2:审核不通过,3:未报名
     */
    private Integer organizerStatus = 3;
    /**
     * 承办单位客服地址
     */
    private String organizerCsImageUrl;
    /**
     * 活动数据
     */
    @Transient
    private HashMap<String, ActivityTaskDataDomain> datas = new HashMap<>();
    /**
     * 答题通过的分数
     */
    private Double passQaScore = 0D;
    /**
     * 答题是否获得证书
     */
    private Boolean hasCa;
    /**
     * 收货人
     */
    private String recieveName;
    /**
     * 收货人电话
     */
    private String recieveMobile;
    /**
     * 区
     */
    protected String area;
    /**
     * 是否可领取证书
     */
    protected Boolean caRecieveCa = Boolean.FALSE;
    /**
     * 答题总阶段
     */
    protected Integer qaTotal;
    /**
     * 当前答题阶段,默认是1阶段
     */
    protected Integer currentQa = 1;
    /**
     * 答题获得证书
     */
    protected String contestCaName;
    /**
     * 年级
     */
    protected String grade;
    /**
     * 当前答题分数-获取当前分数-第一次答题用
     */
    private Double currentQaScore = 0D;
    /**
     * 活动任务明细
     */
    @Transient
    private HashMap<String, ActivityTaskInfo> taskInfos = new HashMap<>();

    /**
     * 是否来源与日志解析添加
     */
    private Boolean logSource = Boolean.FALSE;

    //是否来源与用户活动排行榜表数据
    private Boolean ranking = Boolean.FALSE;

    //总贡献值
    @Transient
    private Double totalValue;
    /**
     * 是否黑名单内
     */
    @Indexed
    private Boolean inBlackList = Boolean.FALSE;
    /**
     * 贡献值
     */
    @Transient
    private Double quantity;
    /**
     * 当前贡献值
     */
    @Transient
    private Double currentQ;
    /**
     * 总邀请人数
     */
    @Transient
    private Integer inviteTotalNum;
    /**
     * 邀请成功人数少
     */
    @Transient
    private Integer inviteSuccessNum;
    /**
     * 是否已经累加贡献值,针对对答题类
     */
    private Boolean accumulateQ = Boolean.FALSE;

    @Transient
    private String wechatPayUrl;
    /**
     * 修改姓名次数
     */
    private Integer updateNameCount = 0;

    private Boolean fromMyPoint = Boolean.FALSE;
    /**
     * 是否参与排行榜
     */
    private Boolean joinRank = Boolean.TRUE;
    /**
     * 排行榜头像
     */
    protected String rankAvatarUrl;
    /**
     * 排行榜昵称
     */
    protected String rankNickName;

    private String appId;

    private String platform;

    @Transient
    private Boolean signUpVideo = Boolean.FALSE;

    private String openId;

    private String unionId;

    private String remark;

    /**
     * 导入额外贡献值是否加过 true 已加 false
     */
    private Boolean importQuantityAdd = Boolean.FALSE;

    /**
     * 目前澳门回归活动-专用
     * 来源其他平台账号ID
     */
    private String otherPlatformOpenId;

    /**
     * 活动渠道ID
     */
    private String activityChannelId;

    /**
     * 打卡签到天数
     */
    private Integer userSignInDay = 0;

    /**
     * true 开启小程序跳转链接
     * false 未开启
     */
    @Transient
    private Boolean openMiniJumpLink = Boolean.FALSE;

    /**
     * 跳转小程序链接
     */
    @Transient
    private String miniJumpLink;

    /**
     * 跳转小程序链接文本描述
     */
    @Transient
    private String miniJumpLinkTextDesc;
    /**
     * 是否抽样
     */
    @Indexed(background = true)
    private Boolean simpled;
    /**
     * 已经邀请的人数
     */
    @Indexed(background = true)
    private Integer invitedNum;

    public Boolean checkUserInfo() {
        return StringUtils.isAllBlank(this.getName(), this.getUniversityName());
    }
}
